---
title: 文件管理
description: 索引文件结构、文件目录、文件存储空间管理
---

## 概述
文件是具有符号名的、在逻辑上具有完整意义的一组相关信息项的集合。

信息项可以是构成文件内容的基本单位，可以是一个字符，也可以是一个记录，记录可以等长，也可以不等长。一个文件 包括文件体和文件说明。文件体是文件真实的内容。文件说明是操作系统为了管理文件所用到的信息，包括文件名、文件内部标识、文件的类型、文件存储地址、文件的长度、访问权限、建立时间和访问时间等。

文件管理系统，就是操作系统中实现文件统一管理的一组软件和相关数据的集合，专门负责管理和存取文件信息的软件机构。简称文件系统。文件系统的功能包括按名取存；统一的用户接口；并发访问控制；安全性控制；优化性能；差错恢复。

文件的逻辑结构可分为两大类：有结构的记录式文件；无结构的流式文件。
### 文件的类型
* 按文件的性质和用户可将文件分为系统文件、库文件和用户文件。
* 按信息保存期限分类可以将文件分为临时文件、档案文件和永久文件。
* 按文件的保护方式分类可将文件分为只读文件、读/写文件、可执行文件和不保护文件。
* UNIX 系统将文件分为普通文件、目录文件和设备文件（特殊文件）
### 文件的物理结构
文件的物理结构是指文件在物理存储设备上的存放方式，包括：
1. 连续结构。连续结构也成为顺序结构，它将逻辑上连续的文件信息（如记录）依次存放在连续编号的物理块上。
2. 链表结构。链表结构也称为串联结构，它是将逻辑上连续的文件信息（如记录）存放在不连续的物理块上，每个物理块都有下一个指针指向下一个物理块。
3. 索引结构。将逻辑上连续的文件信息（如记录）存放在不连续的物理块中，系统为每个文件建立一张索引表。索引表记录了文件信息所在的逻辑块号对应的物理块号。并将索引表的起始地址放在与文件对应的文件目录项中。
4. 多个物理块的索引表。索引表是在文件创建是由系统自动建立的，并于文件一起存放在同一个文件卷上。根据一个文件大小的不同，其索引表占用的物理块的个数不等，一般占一个或几个物理块。

## 索引文件结构

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/202410281755474.png"/>
如上图所示，系统中有 13 个索引节点，0~9 为直接索引，即每个索引节点存放的是内容，假设每个物理盘大小为 4 KB，共可存放 4KB*10 = 40KB 的数据。

10 号索引节点为一级间接索引节点，大小为 4 KB，存放的并非直接数据，而是连接到直接物理盘块的地址，假设每个地址占 4B，则共 1024 个地址，对应 1024 个物理盘，可存 1024*4KB = 4096KB 数据。

二级索引节点类似，直接盘存放一级地址、一级地址再存放物理盘块地址，而后连接到存放数据的物理盘块，容量又扩大了一个数量级，为 1024*1024*4KB 数据。
## 文件目录
文件控制块（FCB）中包含以下三类信息：基本信息类、存储控制信息类和使用信息类。
1. 基本信息类：例如文件名、文件的物理地址、文件长度和文件块数等。
2. 存储控制信息类：文件的存取权限、像 UNIX 用户分为文件主、同组用户和一般用户三类，这三类用户的读/写执行 RWX 权限。
3. 使用信息类：文件建立日期、最后一次修改日期、最后一次访问日期、当前使用的信息（如打开文件的进程数、在文件上的等待队列）等。

<RedSpan>文件控制块的有序集合称为目录</RedSpan>。
* 相对路径：是 <RedSpan>从当前路径开始的路径</RedSpan>。
* 绝对路径：是从 <RedSpan>根目录开始的路径</RedSpan>。
* 全文件名：<RedSpan>绝对路径 + 文件名</RedSpan>

:::tip
绝对路径和相对路径是不加最后的文件名的，只是单纯的路径序列。
:::

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/202410281757714.png"/>


## 文件存储空间管理
文件的存取方法是指 <RedSpan>读/写文件存储器上的一个物理块的方法</RedSpan>。通常有 <RedSpan>顺序存取和随机存取</RedSpan>两种方法。顺序存取方法是指对文件中的信息按顺序依次进行读/写（磁带）；随机存取方法是指文件中的信息可以按任意的次序随机地读写。

### 空闲表法
将外存空间上的第一个连续的未分配区域称为“空闲区”。操作系统为磁盘外存上的所有空闲区建立一张空闲表，每个表项对应一个空闲区，适用于连续文件结构。
<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/202410281813111.png"/>

### 空闲链表法

每个空闲物理块中有指向下一个空闲物理块的指针，所有空闲物理块构成一个链表，链表的头指针放在文件存储器的特定位置上（如管理块中），不需要磁盘分配表，节省空间。

### 成组链表法

例如，在实现时系统将空闲块分成若干组，每 100 个空闲块为一组，每组的第一个空闲块登记了下一组空闲块的物理盘块号和空闲块总数。假设某个组的第一个空闲块号等于 0 ，意味着改组是最后一组，无下一组空闲块。
### 位示图
这种方式是在外存上建立一张位示图（Bitmap）,记录文件存储器的使用情况。<RedSpan>每一位对应存储器上的一个物理块，取值 0 和 1 分别表示空闲和占用</RedSpan>。

<img src="https://wkq-img.oss-cn-chengdu.aliyuncs.com/img/202410281823145.png"/>
